package 异常;

import java.util.Scanner;

public class ExceptionText1 {
    public static void main(String[] args) {
        /**
         * 需求
         * 键盘录入自己心仪的女朋友姓名和年龄
         * 姓名的长度在3- 10之间
         * 年龄的范围为18-40岁
         * 超出这个范围是异常数据不能赋值，需要重新录入,一直录到正确为止。
         * 提示
         * 需要考虑用户在键盘录入时的所有情况比如:录入年龄时超出范围，录入年龄时录入了abc等情况
         */
        //步骤一:创建键盘录入的对象
        Scanner scanner=new Scanner(System.in);
        //创建女朋友的对象
        GirFriend gir=new GirFriend();
        while (true) {
            try {
                //接收女朋友姓名
                System.out.println("输入女朋友的姓名:");
                String name=scanner.next();
                gir.setName(name);
                //接收女朋友年龄
                System.out.println("输入女朋友的年纪:");
                String ages=scanner.next();
                int age = Integer.parseInt(ages);
                gir.setAge(age);
                break;
            } catch (NumberFormatException e) {
                System.out.println("年纪的格式有问题!");
            } catch (NameRuntimeException e) {
               e.printStackTrace();
            } catch (ageRuntimeException e) {
                e.printStackTrace();
            }
        }

        //判断姓名的长度是否在3-10之间
        System.out.println(gir);

    }
}

/**
 * 女朋友的对象
 */
class GirFriend{
    private String name;
    private int age;

    public GirFriend() {
    }

    public GirFriend(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        if (name.length()<3||name.length()>10){
            throw new NameRuntimeException(name+"长度超出范围");
        }
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        if (age<18||age>40){
            throw new ageRuntimeException(age+"年纪超出范围");
        }
        this.age = age;
    }

    public String toString() {
        return "GirFriend{name = " + name + ", age = " + age + "}";
    }
}

/**
 * 自定义姓名异常
 * 意义:就是为了让控制台的报错信息更加见名知意
 */
class NameRuntimeException extends RuntimeException {
    public NameRuntimeException() {
    }

    public NameRuntimeException(String message) {
        super(message);
    }
}

/**
 * 自定义年纪异常
 */
class ageRuntimeException extends RuntimeException{
    public ageRuntimeException() {
    }

    public ageRuntimeException(String message) {
        super(message);
    }
}
